package J3_27;

public class demo {
    public class ThreadAdvantage {
        // 多线程并不⼀定就能提⾼速度，可以观察，count 不同，实际的运⾏效果也是不同的
        private static final long count = 10_0000_0000;
        public static void main(String[] args) throws InterruptedException {
            // 使⽤并发⽅式
            concurrency();
            // 使⽤串⾏⽅式
            serial();
        }
        private static void concurrency() throws InterruptedException {
            long begin = System.nanoTime();

            // 利⽤⼀个线程计算 a 的值
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    int a = 0;
                    for (long i = 0; i < count; i++) {
                        a--;
                    }
                }
            });
            thread.start();
            // 主线程内计算 b 的值
            int b = 0;
            for (long i = 0; i < count; i++) {
                b--;
            }
            // 等待 thread 线程运⾏结束
            thread.join();

            // 统计耗时
            long end = System.nanoTime();
            double ms = (end - begin) * 1.0 / 1000 / 1000;
            System.out.printf("并发: %f 毫秒%n", ms);
        }
        private static void serial() {
            // 全部在主线程内计算 a、b 的值
            long begin = System.nanoTime();
            int a = 0;
            for (long i = 0; i < count; i++) {
                a--;
            }
            int b = 0;
            for (long i = 0; i < count; i++) {
                b--;
            }
            long end = System.nanoTime();
            double ms = (end - begin) * 1.0 / 1000 / 1000;
            System.out.printf("串⾏: %f 毫秒%n", ms);
        }
    }
}
